package com.wy;

import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * 生成 md 文档 并自动打开
 * @author HelloWorld
 * @create 2021/9/23 9:00
 * @email 154803771@qq.com
 */
public class Template {
    public static void main(String[] args) throws IOException {
        String str = "外观数列\n" +
                "给定一个正整数 n ，输出外观数列的第 n 项。\n" +
                "\n" +
                "「外观数列」是一个整数序列，从数字 1 开始，序列中的每一项都是对前一项的描述。\n" +
                "\n" +
                "你可以将其视作是由递归公式定义的数字字符串序列：\n" +
                "\n" +
                "countAndSay(1) = \"1\"\n" +
                "countAndSay(n) 是对 countAndSay(n-1) 的描述，然后转换成另一个数字字符串。\n" +
                "前五项如下：\n" +
                "\n" +
                "1.     1\n" +
                "2.     11\n" +
                "3.     21\n" +
                "4.     1211\n" +
                "5.     111221\n" +
                "第一项是数字 1 \n" +
                "描述前一项，这个数是 1 即 “ 一 个 1 ”，记作 \"11\"\n" +
                "描述前一项，这个数是 11 即 “ 二 个 1 ” ，记作 \"21\"\n" +
                "描述前一项，这个数是 21 即 “ 一 个 2 + 一 个 1 ” ，记作 \"1211\"\n" +
                "描述前一项，这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ，记作 \"111221\"\n" +
                "要 描述 一个数字字符串，首先要将字符串分割为 最小 数量的组，每个组都由连续的最多 相同字符 组成。然后对于每个组，先描述字符的数量，然后描述字符，形成一个描述组。要将描述转换为数字字符串，先将每组中的字符数量用数字替换，再将所有描述组连接起来。\n" +
                "\n" +
                "例如，数字字符串 \"3322251\" 的描述如下图：\n" +
                "\n" +
                "\n" +
                " \n" +
                "\n" +
                "示例 1：\n" +
                "\n" +
                "输入：n = 1\n" +
                "输出：\"1\"\n" +
                "解释：这是一个基本样例。\n" +
                "示例 2：\n" +
                "\n" +
                "输入：n = 4\n" +
                "输出：\"1211\"\n" +
                "解释：\n" +
                "countAndSay(1) = \"1\"\n" +
                "countAndSay(2) = 读 \"1\" = 一 个 1 = \"11\"\n" +
                "countAndSay(3) = 读 \"11\" = 二 个 1 = \"21\"\n" +
                "countAndSay(4) = 读 \"21\" = 一 个 2 + 一 个 1 = \"12\" + \"11\" = \"1211\"\n" +
                "\n" +
                "作者：力扣 (LeetCode)\n" +
                "链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/\n" +
                "来源：力扣（LeetCode）\n" +
                "著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。";

        //System.out.println("Please input: ");
        //Scanner scanner = new Scanner(System.in);
        //String str = scanner.next();


        String[] datas = str.split("\n");
//        for (String data : datas) {
//            System.out.println(data);
//        }
        ArrayList<String> list = new ArrayList<>();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("# ").append(datas[0]);
        list.add(stringBuilder.toString());
        list.add("\n");
        stringBuilder = new StringBuilder();
        int i = 1;
        for (; i < datas.length; i++) {
            if (!datas[i].contains("示例")) {
                stringBuilder.append(datas[i]);
            } else {
                break;
            }
        }
        list.add("## 题目描述\n" + "> " + stringBuilder.toString() + "\n");
        String writer = "", address = "", input = "";
        for (; i < datas.length; i++) {
            if (datas[i].startsWith("示例")) {
                stringBuilder = new StringBuilder();
                stringBuilder.append("### ").append(datas[i]).append("\n");
                list.add(stringBuilder.toString());
            }
            if (datas[i].startsWith("输入")){
                input = "* " + datas[i];
            }
            if (datas[i].startsWith("输出")){
                list.add("> "  + input + "\n> " + "* " + datas[i] + "\n");
            }
            if (datas[i].startsWith("作者：")) {
                writer = datas[i].split("：")[1];
            }
            if (datas[i].startsWith("链接：")){
                address = datas[i].split("：")[1];
            }
        }
        list.add("## 题目来源\n");
        list.add("> " + "[" + writer + "]" + "(" + address + ")" + "\n");
        list.add("## 题目解析\n> \n");
        File file = new File("E:\\Users\\wy155\\OneDrive\\桌面\\code\\leetcode\\" + datas[0] + ".md");
        if (file.exists()){
            System.out.println("文件已存在");
            Desktop.getDesktop().open(file);
            return;
        }
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        for (String s : list) {
            byte[] bytes = s.getBytes();
            try {
                assert outputStream != null;
                outputStream.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            assert outputStream != null;
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(">>> 文件创建成功");
        System.out.println("E:\\Users\\wy155\\OneDrive\\桌面\\code\\leetcode\\" + datas[0] + ".md");


        Desktop.getDesktop().open(file);

    }

}
